/*
 * Copyright (C) 2015 yixun All Rights Reserved.
 * 
 * CompanyService.java
 */
package com.yixun.qfbao.service;

import com.yixun.common.page.Page;
import com.yixun.qfbao.model.Company;
import com.yixun.qfbao.model.PartnerInfo;
import com.yixun.qfbao.model.dto.CompanyDto;
import com.yixun.qfbao.model.dto.CompanyRelationDto;
import com.yixun.qfbao.model.dto.Organization;

import java.util.List;
import java.util.Map;

/**
 * [文件名称]<br>
 * CompanyService.java<br>
 * <br>
 * [文件描述]<br>
 * 商户 service interface<br>
 * <br>
 * [修改记录]<br>
 * 2015-12-10 14:36:24 创建 陶俊代码生成器<br>
 * 
 * @author 陶俊代码生成器
 * @version 1.00
 */
public interface CompanyService {
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<Company> getPageModel(CompanyDto entity,int begin,int end);
	
	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<Company> selectListByDto(CompanyDto entity);
	
	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<Company> selectMyListByDto(CompanyDto entity);
	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<Company> selectListInfo(CompanyDto entity);
	
	/**
	 * 查询单个
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public Company selectByDto(CompanyDto entity);
	
	/**
	 * @param id 根据主键搜索
	 * @return 一行记录
	 */
	public Company selectById(Long id);
	/**
	 * @param id 根据主键搜索
	 * @return 一行记录
	 */
	public CompanyDto selectByMyId(Long id);
	
	/**
	 * @param entity 根据pojo搜索如果主键为空则返回它本身
	 * @return 一行记录或本身
	 */
	public Company selectBy(Company entity);
	
	/**
	 * @param entity 新增记录的详细信息
	 * @return 新增行数
	 */
	public CompanyDto create(CompanyDto entity);
	/**
	 * @param entity 更新记录的详细信息
	 * @return 更新行数
	 */
	public int update(CompanyDto entity);
	/**
	 * @param entity 更新记录的详细信息
	 * @return 更新行数
	 */
	public int updateByComapnyUuid(CompanyDto entity);
	/**
	 * @param entity 更新记录的详细信息
	 * @return 更新行数
	 */
	public int updateByMyid(CompanyDto entity);
	/**
	 * @param entity 待删除的记录信息
	 * @return 删除行数
	 */
	public int destroy(CompanyDto entity);
	/**
	 * @param entity 新增或更新
	 * @return 新增行数
	 */
	public int saveOrUpdate(CompanyDto entity);
	
	public Page<Company> getDistributionPage(CompanyDto entity,int begin,int end);
	public List<Company> agentCompanyMap(CompanyDto entity);
	
	/**
	 * 查询开发商与M2之间是否为绑定关系
	 *
	 * @param companyId 开发商或中介公司ID
	 * @param companyType 公司类型: 中介或开发商,对应 companyTypeEnum
	 * @return 商户号: 存在及有绑定关系
	 */
	public String isDevBindM2(String companyId, String companyType);

	/**
	 * 获取是否需要佣金
	 * @param higherId
	 * @return true 需要 false 不需要
	 */
	public boolean getCommissionFlag(Long higherId);
	/**
	 * 获取是否需要发送短信
	 * @param higherId
	 * @return true 需要 false 不需要
	 */
	public boolean getMessageFlag(Long higherId);
	/**
	 * 
	 * @param cDto
	 * @return
	 */
	List<CompanyDto> selectListByIds(CompanyDto cDto);
	/**
	 * 获取公司代码
	 * @return
	 */
	public String getCompanyCode(Company company);
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<CompanyDto> selectDtoListById(CompanyDto entity,int begin,int end);
	/**
	 * 更新审核状态
	 * @param entity
	 * @param pi
     * @return
	 */
	public int updateStatus(CompanyDto entity, PartnerInfo pi);

	/**
	 * 查询该楼盘下未设置过佣金规则的合作机构
	 * @param devCompanyId
	 * @param premeiseId
	 * @return
	 */
	List<CompanyRelationDto> findCompanysForCommissionRule(Long devCompanyId, Long premeiseId);
	
	/**
	 * 根据域名,获取开发商
	 * @param 域名
	 * @return long or null
	 */
	Long getCompanyIdByDomain(String domain);

	/**
	 * 根据公司码获取总代公司
	 * @param
	 * @return long or null
	 */
	String getDevCompanyByAgentCompanyCode(String companyCode);

	Organization getOrganizationInfo(Long higherId, Long deptId);

	/**
	 * 
	 * @param agentPhone  分销人手机号码
	 * @param companyUuid	总代公司Uuid
	 * @return
	 */
	Map<String, Object> getAgentInfo(String agentPhone, String companyUuid);
}

